package com.wy._02io.fileUtil;

import java.io.File;

/**
 * 删除文件或目录
 */
public class DeleteFileOrDir {

    /**
     * 删除一个目录
     *
     * @param rootDir            被删除的目录
     * @param isDeleteCurrentDir 是否删除当前目录
     */
    private static void deleteDir(File rootDir, boolean isDeleteCurrentDir) {

    }

    /**
     * 递归删除，
     *
     * @param rootDir
     * @param absolutePath
     */
    private static void deletes(File rootDir, String absolutePath) {
        File[] files = rootDir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                if (absolutePath.equals(file.getAbsolutePath())) {
                    continue;
                } else if (absolutePath.contains(file.getAbsolutePath())) {
                    deletes(file, absolutePath);
                } else {
                    deleteCurrentDirAllFileAndDir(file);
                }
            } else if (file.isFile()) {
                file.delete();
            }
        }
    }

    /**
     * 删除此目录下的所有文件和目录，包括此目录
     *
     * @param directory
     */
    public static boolean deleteCurrentDirAllFileAndDir(File directory) {
        // 目录不存在直接返回 true
        if (!directory.exists()) {
            return true;
        }
        // 获取目录中的所有文件和子目录
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                // 如果是目录，递归删除
                if (file.isDirectory()) {
                    return deleteCurrentDirAllFileAndDir(file);
                } else {
                    if (!file.delete()) {
                        return false;
                    }
                }
            }
        } else {
            return false;
        }
        // 删除当前目录
        return directory.delete();
    }

    /**
     * 删除 A目录下 非B目录的所有文件和目录。
     * 什么情况下会有这种需求
     *
     * @param rootDir      A目录
     * @param offspringDir B目录
     * @return 是否删除成功
     */
    public static boolean deleteRootDirNonOffspringDir(File rootDir, File offspringDir) {
        if ((!rootDir.exists()) ||
                (!rootDir.isDirectory()) ||
                (!offspringDir.exists()) ||
                (!offspringDir.isDirectory()) ||
                (!offspringDir.getAbsolutePath().contains(rootDir.getAbsolutePath())) ||
                rootDir.getAbsolutePath().equals(offspringDir.getAbsolutePath())) {
            System.out.println("传入文件异常");
            return false;
        }
        String absolutePath = offspringDir.getAbsolutePath();
        deletes(rootDir, absolutePath);
        return true;
    }
}